在開始部屬服務之前,先來讓我們了解運行服務需要哪些元件。
介紹
Pod是Kubernetes中部署的最小單位為Pod(如下圖所示),一個節點會有多個Pod,每個Pod由一至多個容器所組成,Kubernetes會根據當前節點的資源將相同的Pod中的容器分配制同一個節點上,共享相同的IP位址及Port、共
享儲存空間 (volumes),通常耦合性較高之應用會被部署至相同的Pod當中。在普遍的情況下盡可能遵循微服務(Microservices)的概念,將不同的服務分為多個Pod或容器,使服務具備較高的擴展性及較低的耦合性,使維運人
員較容易維護。
在Docker中,不同的容器會有各自獨立的IP,而在Kubernetes中,相同Pod中的容器共享相同IP位址與Port,因此Pod容器內部彼此可以透過localhost來溝通,降低容器之間溝通的延遲。因此,相同Pod的容器需要注意,若某個Port已經被其他容器使用,則此Pod內的容器無法再使用。
Kubernetes中Pod元件基於臨時性所設計的,因此Pod可以很輕易的建立及刪除,但也因此,Pod不具有在排程錯誤,節點故障等情況提供自我修復的特性,一般來說,使用者不會直接建立Pod,而是透過其他Controller如StatefulSet、DaemonSet、ReplicaSet與Deployment等。
範例yaml格式
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- image: nginx:1.7.9
name: nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
hostPort: 80
在 Pod 服務元件的使用上,Pod 內部運作的功能,需以 Pod 網路的功能請求對外埠號,將原有的 Pod 服務向外提供對外服務的接口,為了實踐 Pod 對外服務與內部 Pod 相互溝通的功能,Kubernetes 提供 Service 中介網路介面機制,服務 Pod 使用 Service 的 Node Port 功能,Kubernetes 將 Pod 副本群中特定服務 Pod (標籤) 進行鎖定,透過相同 Pod 標籤篩選的 Pod 群將服務 Pod 埠號進行轉換,設計對外服務埠號開啟(30000埠以上),對於外部服務埠號進行洩漏,提供外部網路串接服務與終端使用者操作使用,而透過 Cluster IP 功能,在眾多網路獨立的 Pod 服務之中,藉由 Pod 標籤的篩選相同服務類型的服務 Pod,將相同 Pod 標籤的 Pod 副本群的網路 IP 進行整合,轉換一個對內存取服務的 Cluster IP,而其後端導向多個相同標籤的 Pod 副本群,並透過內部 Service 通訊設計,可提供其他服務 Pod 的串接使用。
了解這些元件之後,我們就可以將服務部屬到edge端上,接下來為大家介紹如何部屬服務到edge